﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Program23
{
    class Program
    {
        #region 习题
        //1.{患者：“大夫，我咳嗽得很重。”     大夫：“你多大年记？”     患者：“七十五岁。”     
        //大夫：“二十岁咳嗽吗”患者：“不咳嗽。”     大夫：“四十岁时咳嗽吗？”     
        //患者：“也不咳嗽。”     大夫：“那现在不咳嗽，还要等到什么时咳嗽？}
        //找出第1次出现咳嗽的位置是第几个字符

        //2.将字符串"  hello      world,你  好 世界   !    "
        //两端空格去掉，并且将其中的所有其他空格都替换成一个空格，
        //输出结果为："hello world,你 好 世界 !"。

        //3.存储用户输入的姓名，回车存储；只要用户不输入‘quit’就可以一直输入。
        //输入quit后打印出所有刚才输入的姓名，统计个数

        //4.请将字符串数组{ "中国", "美国", "巴西", "澳大利亚", "加拿大" }中的内容反转。然后输出反转后的数组。不能用数组的Reverse()方法

        //5. 用方法来实现：计算两个数的最大值。 扩展：计算任意多个数间的最大值

        //选做题：输入要打开的文件路径，输入要打开的文件名字，按文件类型打开文件读取文件内容
        #endregion
        
        static void Main(string[] args)
        {
            Console.WriteLine("习题1：");
            string str1 = "患者：“大夫，我咳嗽得很重。” 大夫：“你多大年记？” 患者：“七十五岁。” 大夫：“二十岁咳嗽吗”患者：“不咳嗽。”     大夫：“四十岁时咳嗽吗？” 患者：“也不咳嗽。”     大夫：“那现在不咳嗽，还要等到什么时咳嗽？";
            Console.WriteLine("第一次出现的位置：" + GetStr(str1));


            Console.WriteLine("\r\n习题2：");
            string str2 = "  hello      world,你  好 世界   !    ";
            Console.WriteLine(TrimStr(str2));


            Console.WriteLine("\r\n习题3：");
            SaveStr();


            Console.WriteLine("\r\n习题4：");
            string[] str3 = { "中国", "美国", "巴西", "澳大利亚", "加拿大" };
            foreach (var item in ReverseStr(str3))
            {
                Console.Write(item + " ");
            }


            Console.WriteLine("\r\n\r\n习题5：");
            GetMaxNum(9, 2, 3, 6);

            //扩展，选做题，未完成
            OpenFile();

            Console.ReadLine();
        }

        /// <summary>
        /// 习题1，查找咳嗽
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static int GetStr(string str)
        {
            for (int i = 0; i < str.Length; i++)
            {
                if (str.Contains("咳嗽"))
                {
                    if (str[i].Equals('咳'))
                    {
                        return i;
                    }
                }
            }

            //int index = str.IndexOf("咳嗽");
            //int i = 1;
            //Console.WriteLine("第1次出现咳嗽的位置是{0}", index);

            //while (index != -1)
            //{
            //    i++;
            //    index = str.IndexOf("咳嗽", index + 1);
            //    if (index == -1)
            //    {
            //        break;
            //    }
            //    Console.WriteLine("第{0}次找到咳嗽的位置是{1}", i, index);
            //}
            return 0;
        }


        /// <summary>
        /// 习题2，去除空格
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string TrimStr(string str)
        {
            string trim = "";
            for (int i = 0; i < str.Length; i++)
            {
                if (!str[i].Equals(' '))
                {
                    trim += str[i];
                    if (str[i + 1] == ' ')
                    {
                        trim += " ";
                    }
                }
            }
            //str = str.Trim();
            //string[] sNew = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            //string strNew = string.Join(" ", sNew);

            return trim;
        }

        /// <summary>
        /// 习题3，保存输入内容
        /// </summary>
        public static void SaveStr()
        {
            List<string> list = new List<string>();
            while (true)
            {
                Console.WriteLine("请输入姓名：（输入quit退出）");
                string str = Console.ReadLine();
                if (str != "quit")
                {
                    list.Add(str);
                }
                else
                {
                    break;
                }
            }
            Console.WriteLine("\r\n姓名：");
            foreach (var item in list)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine("\r\n总共有：{0}个名字", list.Count);
        }

        /// <summary>
        /// 习题4，交换数组元素
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string[] ReverseStr(string[] str)
        {
            for (int i = 0; i < str.Length/2; i++)
            {
                string tmp = str[i];
                str[i] = str[str.Length - 1 - i];
                str[str.Length - 1 - i] = tmp;
            }
            return str;
        }

        /// <summary>
        /// 习题5，获取最大值
        /// </summary>
        /// <param name="nums"></param>
        public static void GetMaxNum(params int[] nums)
        {
            int tmp = nums[0];
            for (int i = 0; i < nums.Length; i++)
            {
                if (tmp < nums[i])
                {
                    tmp = nums[i];
                }
            }
            Console.WriteLine("最大值：" + tmp);
        }

        public static void OpenFile()
        {
            Console.WriteLine("请输入要打开文件的路径:");
            string path = Console.ReadLine();
            DirectoryInfo file = new DirectoryInfo(path);
            if (file.Exists)
            {
                Console.WriteLine("请输入要打开文件的名字:");
                string fileName = Console.ReadLine();
                FileInfo[] files = file.GetFiles(fileName);
                if (files.Length != 0)
                {
                    //if (files[0].Extension == ".txt") 
                    //{
                    //    using (FileStream fsRead = new FileStream(files[0].FullName, FileMode.OpenOrCreate, FileAccess.Read))
                    //    {
                    //        byte[] buffer = new byte[1024 * 1024 * 5];
                    //        int r = fsRead.Read(buffer, 0, buffer.Length);

                    //        Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, r));
                    //    }
                    //}
                    ProcessStartInfo startInfo = new ProcessStartInfo(files[0].FullName);

                    //创建进程
                    Process p = new Process();
                    p.StartInfo = startInfo;
                    p.Start();
                }
            }
        }
    }
}
